package pers.mine.utils;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;

import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;

import pers.mine.po.SysResource;
import pers.mine.po.SysRole;

/**
 * 一些通用工具方法
 * @author Mine
 * @since 2017年4月21日_下午10:03:27
 */
public class MineCommonUtils {

	/**
	 * 获取shiro默认的MD5带盐加密字符串
	 * @param salt 盐值
	 * @param hashIterations 重复加密次数
	 * @param str 加密字符串
	 * @return
	 */
	public static String getShiroMD5(String salt,int hashIterations,String str){
		ByteSource bsSalt=ByteSource.Util.bytes(salt);
		return new SimpleHash("MD5", str, bsSalt, hashIterations).toString();
	}
	
	/**
	 * 获取UUID，删除"-",并全大写
	 * @return
	 */
	public static String getUUID_NoHyphen(){
		   String s = UUID.randomUUID().toString(); 
	        //去掉"-"符号 
	        return s.replaceAll("\\-", "").toUpperCase(); 
	}
	
	/**
	 * List&lt;T&gt; 转 Set&lt;T&gt;
	 */
	public static <T> Set<T> converListToSet(List<T> list){
		if(list==null||list.size()==0){
			return null;
		}
		Set<T> set=new HashSet<T>(list);
		return set;
	}
	
	/**
	 * 数组&lt;T&gt; 转 Set&lt;T&gt;
	 */
	public static <T> Set<T> converArrayToSet(T[] arr){
		if(arr==null||arr.length==0){
			return null;
		}
		Set<T> set=new HashSet<T>();
		for (T one : arr) {
			set.add(one);
		}
		return set;
	}
	
	/**
	 * Set&lt;T&gt; 转 List&lt;T&gt; 
	 */
	public static <T> List<T> converSetToList(Set<T> set){
		if(set==null||set.size()==0){
			return null;
		}
		List<T> list = new ArrayList<T>(set);
		return list;
	}
	/**
	 * 根据所有角色信息列表获取对应name信息列表
	 */
	public static  Set<String> getSysRoleNamesBySysRoles(Set<SysRole> sysRoles){
		if(sysRoles==null||sysRoles.size()==0){
			return null;
		}
		Set<String> names = new HashSet<String>();
		for (SysRole one : sysRoles) {
			names.add(one.getId());
		}
		return names;
	}
	
	/**
	 * 根据所有资源信息列表获取对应权限字符串信息列表
	 */
	public static  Set<String> getSysResourcePermissionsBySysResources(Set<SysResource> sysResources){
		if(sysResources==null||sysResources.size()==0){
			return null;
		}
		Set<String> permissions = new HashSet<String>();
		for (SysResource one : sysResources) {
			String permission=one.getPermission();
			if(!(permission==null||"".equals(permission))){
				permissions.add(permission);
			}
			
		}
		return permissions;
	}
	
	/**
	 * 将部分已拥有资源和全部资源合并，并设置对应资源为已拥有
	 */
	public static Set<SysResource>  markSysResourcesCheckedByPartInfo(List<SysResource> all,Set<SysResource> part){
		Set<SysResource> target = new HashSet<SysResource>();
		if(part==null||part.size()<1){
			return MineCommonUtils.converListToSet(all);
		}
		for (SysResource one : all) {
			A:for (SysResource two : part) {
				if(one.getId().equals(two.getId())){
					one.setChecked(true);
					break A;
				}
			}
			target.add(one);
		}
		return target;
	}
	
	/**
	 * 获取一天开始时间
	 * @return
	 */
	public static Long getTodayStartTime(){  
        Calendar todayStart = Calendar.getInstance();  
        todayStart.set(Calendar.HOUR_OF_DAY, 0);  
        todayStart.set(Calendar.MINUTE, 0);  
        todayStart.set(Calendar.SECOND, 0);  
        todayStart.set(Calendar.MILLISECOND, 0);  
        return todayStart.getTime().getTime();  
    }  
	/**
	 * 获取一天结束时间
	 * @return
	 */
	public static Long getTodayEndTime(){  
        Calendar todayEnd = Calendar.getInstance();  
        todayEnd.set(Calendar.HOUR_OF_DAY, 23);  
        todayEnd.set(Calendar.MINUTE, 59);  
        todayEnd.set(Calendar.SECOND, 59);  
        todayEnd.set(Calendar.MILLISECOND, 999);  
        return todayEnd.getTime().getTime();  
    } 
}
